Move mobile working timer into the thread timeline#4285
Conversation
- Render active work duration as a timeline row - Animate the composer connection status above the composer - Add coverage for active work feed presentation
| return ( | ||
| <View className="items-center pb-2"> | ||
| <Animated.View | ||
| className="absolute inset-x-0 bottom-full items-center pb-2" |
There was a problem hiding this comment.
🟡 Medium threads/ThreadComposer.tsx:242
ComposerConnectionStatusPill is now absolutely positioned at bottom-full, the same anchor used by ComposerCommandPopover (which also has z-10). When a command popover is open while a reconnect/loading status exists, the popover renders on top of the status pill, obscuring its message and reconnect button. The previous in-flow layout reserved vertical space so the two elements never shared the same slot. Consider offsetting the status pill further (e.g. accounting for the popover height) or repositioning it so it doesn't collide with the popover.
🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/mobile/src/features/threads/ThreadComposer.tsx around line 242:
`ComposerConnectionStatusPill` is now absolutely positioned at `bottom-full`, the same anchor used by `ComposerCommandPopover` (which also has `z-10`). When a command popover is open while a reconnect/loading status exists, the popover renders on top of the status pill, obscuring its message and reconnect button. The previous in-flow layout reserved vertical space so the two elements never shared the same slot. Consider offsetting the status pill further (e.g. accounting for the popover height) or repositioning it so it doesn't collide with the popover.
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
Bugbot Autofix is ON, but a cloud agent failed to start.
Reviewed by Cursor Bugbot for commit 864aeef. Configure here.
| className="absolute inset-x-0 bottom-full items-center pb-2" | ||
| entering={FadeInDown.duration(180)} | ||
| exiting={FadeOutDown.duration(140)} | ||
| pointerEvents="box-none" |
There was a problem hiding this comment.
Status pill overlays approval cards
Medium Severity
The ComposerConnectionStatusPill is now absolutely positioned (bottom-full), which removes it from the layout flow. This means it no longer reserves space, causing it to overlap with the feed end, new working rows, and pending approval/user-input cards. This overlap can also lead to it stealing presses from underlying elements.
Reviewed by Cursor Bugbot for commit 864aeef. Configure here.
ApprovabilityVerdict: Needs human review 1 blocking correctness issue found. This PR relocates the working timer from above the composer to the thread timeline. Two unresolved review comments identify potential UI overlap issues with the connection status pill's new absolute positioning, which could obscure other elements or interfere with touch events. You can customize Macroscope's approvability policy. Learn more. |
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
(cherry picked from commit 7e2bb47)
…dotgg#2284) (#184) * Sidebar v2 beta: flat thread list with a server-backed settled lifecycle (pingdotgg#4026) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: maria-rcks <maria@kuuro.net> (cherry picked from commit 32c6012) * fix(settings): validate the add-provider wizard step before advancing (pingdotgg#2813) (pingdotgg#3100) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 282ecb3) * fix(claude): isolate capability probe from user MCP servers (pingdotgg#4015) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit aa5ec80) * Preserve connecting status while a turn starts (pingdotgg#4101) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 783692a) * fix(server): stop restoring stale OpenCode models (pingdotgg#4095) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 4e09cdd) * [codex] keep scoped package references as text (pingdotgg#4167) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit c7b21ff) * fix(web): default provider selection for users without Codex (pingdotgg#4117) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit b6e1b39) * Unify temporary worktree branch naming (pingdotgg#4278) (cherry picked from commit 571a8b4) * fix(web): use message-square icon for settled icon-less project threads in sidebar v2 (pingdotgg#4279) (cherry picked from commit 020179c) * Stabilize sidebar settling animations (pingdotgg#4280) (cherry picked from commit 18b4688) * Restore Copy Link in chat link context menu (pingdotgg#4161) Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit e5fba26) * fix(desktop): handle EPIPE errors on stdout/stderr to prevent crash dialog (pingdotgg#4213) (cherry picked from commit f74eb62) * Preserve draft thread highlighting during promotion (pingdotgg#4283) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 18fa89c) * Move mobile working timer into the thread timeline (pingdotgg#4285) (cherry picked from commit 7e2bb47) * Stabilize PR status lookups and provider session lifecycle (pingdotgg#4281) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 376c149) * fix: open command palette instead of custom dialog for new thread picker in SidebarV2 (pingdotgg#4269) (cherry picked from commit 9fe4832) * fix(server): don't drop sticky PR fallback when remote URL can't be resolved (pingdotgg#4289) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 9a0a071) * feat(web): copy branch name via right-click in the branch selector (pingdotgg#4275) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 78a0ea5) * Add remote server updates and standalone service management (pingdotgg#4286) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit ab4a883) * Refine light-mode sidebar surfaces (pingdotgg#4268) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 593289c) * fix(mobile): don't mark Android VPN/Tailscale as offline when connected (pingdotgg#3949) (cherry picked from commit bc9428a) * improve and prevent silent thread branch drift and PR fetching (pingdotgg#2284) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 2d31cb0) * fix(sync): restore fork migration IDs under Sidebar v2 settled Upstream pingdotgg#4026 replaced Migrations.ts with linear upstream numbering and dropped fork-only migrations (NormalizeLegacyProviderKinds, RepairProposedPlanColumns, BackfillForkProviderInstanceIds). Restore the fork registry and append ProjectionThreadsSettled as ID 36. Co-authored-by: aaditagrawal <aaditagrawal@users.noreply.github.com> --------- Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Leonel Rivas <encriptandost@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Jaret Bottoms <jaretbottoms@gmail.com> Co-authored-by: Ishan <ishansachu1@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: Maxwell Young <maxtheyoung@gmail.com> Co-authored-by: Miklós Fazekas <mfazekas@szemafor.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com> Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com> Co-authored-by: legs <145564979+justsomelegs@users.noreply.github.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: aaditagrawal <aaditagrawal@users.noreply.github.com>


Summary
Testing
threadActivitycoverage for active work rows.Note
Low Risk
Presentation-only mobile thread UI and feed derivation; scroll inset changes are a deliberate simplification with no auth or data-path impact.
Overview
Moves the “Working for …” indicator from the floating composer stack into the thread message list, so active agent work reads as part of the conversation timeline instead of sitting above the input.
deriveThreadFeedPresentationnow acceptsactiveWorkStartedAtand appends a syntheticworkingrow (working-indicator-row) at the end of the presented feed.ThreadFeedrenders that row with a per-second elapsed label viaWorkingTimelineRow. The empty-thread placeholder is suppressed when work is active so users still see the timer on an otherwise empty thread.Thread detail / composer chrome:
WorkingDurationPilland the extra overlay height reserved for it are removed; keyboard/list bottom inset math no longer includes a working-indicator slot. Pending approval/user-input cards stay in the composer overlay but without the layout animation wrapper that surrounded the old working pill.Composer connection pill: The reconnect/sync status pill is repositioned above the composer (
absolute+bottom-full) and gets FadeInDown / FadeOutDown enter/exit animations.Tests cover appending the active-work row and stripping it when re-derived without
activeWorkStartedAt.Reviewed by Cursor Bugbot for commit 864aeef. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Move the working timer from the composer overlay into the thread timeline
WorkingDurationPilloverlay above the composer inThreadDetailScreenand instead passesactiveWorkStartedAtdown toThreadFeed.WorkingTimelineRowcomponent that renders a live-updating "Working for " row at the bottom of the feed, refreshing every second viasetInterval.threadActivity.tswith a'working'entry type and updatesderiveThreadFeedPresentationto append or remove it based onactiveWorkStartedAt.ThreadComposeris changed to an absolutely positioned overlay withFadeInDown/FadeOutDownanimations, freeing up vertical layout space.📊 Macroscope summarized 864aeef. 4 files reviewed, 0 issues evaluated, 0 issues filtered, 0 comments posted
🗂️ Filtered Issues
No issues evaluated.